package com.youzhi.backend.service;

import java.io.Serializable;
import java.util.Map;

/**
 * 用户在线状态存储 service
 * <p>
 * 存储在线用户的一些相关数据
 */
public interface IUserSessionService {

    String attr_sessionId = "sessionId";

    String attr_webSocketId = "webSocketId";

    String attr_userId = "userId";

    String attr_clientIp = "clientIp";


    /**
     * 被挤下线
     * 强制清除移除用户在线状态相关属性
     * 并发通知给用户
     *
     * @param userName
     */
    void remove(String userName);


    /**
     * 用户登陆
     *
     * @param userName 用户名称
     * @param password 用户密码
     */
    void login(String userName, String password);


    /**
     * 用户登出
     * 清理在线用户sessionKey
     * 清理用户缓存数据
     *
     * @param
     */
    void logout();


    /**
     * 获取当前登陆用户名
     *
     * @return
     */
    String getCurrentUser();


    /**
     * 获取当前登陆用户属性
     *
     * @param attrName
     * @return
     */
    Object getCurrentUserAttr(String attrName);


    /**
     * 设置当前登陆用户session数据
     *
     * @param key
     * @param value
     */
    void setCurrentUserAttr(String key, Object value);

    /**
     * 设置当前登陆用户session数据
     *
     * @param map
     */
    void setCurrentUserAttr(Map<String, Object> map);


    /**
     * 获取当前登陆用户sessionId
     *
     * @return
     */
    Serializable getCurrentSessionId();


    /**
     * 获取指定用户的websocketId
     *
     * @param userName
     * @return
     */
    String getUserWebsocketId(String userName);


    /**
     * 判断当前用户是否登陆
     * <p>
     * 实现逻辑就是检查redis里面user:{userName}这个key是否存在
     *
     * @param userName
     * @return
     */
    boolean isLogin(String userName);


}
